package ch10_thread.thread;

/**
 * 一、八大核心基础
 * 1、实现多线程的方式有几种？准确的讲创建线程只有一种方法就是构造Thread类，而实现线程的执行单元有两种。
 * 2、如何正确启动线程？
 * 3、上山容易下山难，如果停止线程？
 * 4、六个状态，生命周期？
 * 5、线程属性？
 * 6、Thread和Object中方法讲解？
 * 7、未捕获异常如何处理？
 * 8、双刃剑，多线程导致的问题？
 * <p>
 * 程序有几条执行路径
 * 并发压力测试工具：jMeter（界面方式推荐使用）、apache ap（命令方式）
 * 同步（synchronous）：方法一旦调用需要等待方法执行完成
 * 异步（asynchronous）：方法之间可以并行执行
 * <p>
 * 串行：一次只能取得一个任务并执行这个任务，这个任务执行完后面的任务才能继续；
 * 并发：同一个时间段内，多条指令在CPU上同时执行；
 * 并行：同一时刻，多条指令在CPU上同时执行。
 * <p>
 * 阻塞：A调用B ，A一直等着B的返回，别的事情什么也不干。
 * 非阻塞：A调用B，A不用一直等着B的返回，先去忙别的事情了。
 * <p>
 * 相应中断的方法
 * Object：wait
 * Thread：sleep、join
 * BlockingQueue：task、put
 * Lock：LockInterrupt
 * CountDownLatch：await
 * CyclicBarrier：await
 * Exchanger：exchange
 * InterruptibleChannel
 * Selector
 * <p>
 * 问题？
 * 1、为什么线程通信的方法wait、notify、notifyAll方法会定义到Object类里面？而sleep在Thread对象？
 * 2、用多种方法实现生产者、消费者
 * 3、Java SE 8 & Java SE 1.8 & JDK 8是什么关系？是一个东西吗？
 * 4、join、sleep、wait期间线程的状态是什么？为什么？
 * 5、wait、notify、sleep异同（阻塞？中断？同步方法？释放锁？指定时间？方法属于哪个对象？线程状态怎么切换？）
 * 6、在join期间，线程处于什么线程状态？（waiting）
 *
 * @author guodd
 * @version 1.0 use jdk 1.8
 */
public class AMain {
    // main方法是主线程
    public static void main(String[] args) {
        System.out.println("main");
        t1();
    }

    public static void t1() {
        System.out.println("t1");
        t2();
        t3();
    }

    public static void t2() {
        System.out.println("t2");
    }

    public static void t3() {
        System.out.println("t3");
    }
}
